package BasicClass.Three;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test_Seven {
    //运用bufferedReader实现数据的输入
    public static void main(String args[]) throws IOException {
        BufferedReader buf= new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(buf.readLine());
        int[] arr = new int[n];
        String[] strs = buf.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(strs[i]);
        }
        redixSort(arr);
        for (int i=0; i<arr.length; i++){
            System.out.print(arr[i]+" ");
        }
    }

    public static void redixSort(int[] arr){
        int[] help = new int[arr.length];
        int max = getMax(arr);
        int res = getRedix(max);//得到数组的最大值的最高位数
        //从个位开始，每一位都进行一次分桶，出桶的操作
        for(int i=1; i<=res; i++){
            //准备一个长度为10的数组，作为“桶”
            int[] bucket = new int[10];
            for(int j=0; j<arr.length; j++){
                bucket[getDigit(arr[j],i)]++; //如果arr[j]的第i位是k  那么bucket[k]加1
            }
            //然后对bucket数组做一个累加，这样bucket数组中bucket[k]=x 表示arr数组中i位数值小于等于k的数一共有x个
            for(int k=1; k<bucket.length; k++){
                bucket[k] += bucket[k-1];
            }
            //然后遍历整个数组，按照i位数值大小的顺序，排列一次
            for(int m=arr.length-1; m>=0; m--){
                help[--bucket[getDigit(arr[m],i)]] = arr[m];
            }
            //把help数组的数存回arr
            for(int l=0; l<arr.length; l++){
                arr[l] = help[l];
            }
        }
    }

    public static int getRedix(int a){
        int x = 0;
        while(a != 0){
            x++;
            a /= 10;
        }
        return x;
    }

    //得到数组中的最大值
    public static int getMax(int[] arr){
        int max = Integer.MIN_VALUE;
        for (int i=0; i<arr.length; i++){
            max = Math.max(max,arr[i]);
        }
        return max;
    }
    //得到整数a的第d位数
    public static int getDigit(int a, int d){
        return ((a/(int)Math.pow(10,d-1))%10);
    }
}

